﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIIE_ERP.Codigo;

namespace SIIE_ERP.BaseDatos.Bancos.Transacciones
{
    public class dbo_Pago_Clientes
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public dbo_Pago_Clientes(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion

        #region SELECT

        public DataTable Get_Pagos_A_Clientes()
        {
            string Query = @"SELECT A1.*,
                                    A2.Nombre_Comercial as Desc_Cliente,
                                    A3.Nombre as Desc_Cuenta,
                                    A4.Clave as Desc_Moneda
                            FROM (((
                                dbo_Trans_Pago_Cliente as A1 
                                    INNER JOIN dbo_Cat_Cliente as A2 ON A1.Id_Cliente =A2.Id_Cliente ) 
                                    INNER JOIN dbo_Cat_Cuenta_Bancaria as A3 ON A1.Id_Cuenta = A3.Id_Cuenta)    
                                    INNER JOIN dbo_Cat_Moneda as A4 ON A1.Id_Moneda = A4.Id_Moneda)
                            WHERE A1.RFC = '@@RFC' ORDER BY Secuencia DESC";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Pago_A_Cliente_Por_Secuencia(Int32 Secuencia)
        {
            string Query = @"SELECT A1.*,
                                    A2.Nombre_Comercial as Desc_Cliente,
                                    A3.Nombre as Desc_Cuenta,
                                    A4.Nombre as Desc_Moneda,
                                    A5.Nombre as Desc_Forma_Pago
                            FROM ((((
                                dbo_Trans_Pago_Cliente as A1 
                                    INNER JOIN dbo_Cat_Cliente as A2 ON A1.Id_Cliente =A2.Id_Cliente ) 
                                    INNER JOIN dbo_Cat_Cuenta_Bancaria as A3 ON A1.Id_Cuenta = A3.Id_Cuenta)    
                                    INNER JOIN dbo_Cat_Moneda as A4 ON A1.Id_Moneda = A4.Id_Moneda)
                                    INNER JOIN dbo_Cat_Forma_Pago as A5 ON A1.Id_Forma_Pago = A5.Id_Forma_Pago)
                            WHERE A1.RFC = '@@RFC' AND A1.Secuencia = @@Secuencia";
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Secuencia", ((Int32)Secuencia).ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }
        
        #endregion

        #region INSERT

        public Respuesta Insert_Pago_Cliente_Cab(
            string Cliente,
            DateTime FechaPago,
            string FormaPago,
            string CuentaBancaria,
            string Concepto,
            string Referencia,
            string Moneda,
            string Importe,
            string Ingreso
        )
        {
            try
            {   
                string Query = @"INSERT INTO dbo_Trans_Pago_Cliente
                                (
                                    Id_Pago,
                                    RFC,
                                    Secuencia,
                                    Estatus,
                                    Id_Cliente,
                                    Fecha_Pago,
                                    Id_Cuenta,
                                    Id_Forma_Pago,
                                    Concepto,
                                    Referencia,
                                    Id_Moneda,
                                    Importe,
                                    Pendiente_Por_Aplicar,
                                    EsIngreso,
                                    Fecha_Alta,
                                    Usuario_Alta,
                                    Fecha_Mantto,
                                    Usuario_Mantto
                                )
                                VALUES
                                (
                                    IIF(DCount('*', 'dbo_Trans_Pago_Cliente') = 0, 1, DMax('Id_Pago', 'dbo_Trans_Pago_Cliente') + 1),
                                    '@@RFC',
                                    IIF(DCount('*', 'dbo_Trans_Pago_Cliente', ""RFC = '@@RFC'"") = 0, 1, DMax('Id_Pago', 'dbo_Trans_Pago_Cliente', ""RFC = '@@RFC'"") + 1),
                                    @@Estatus,
                                    
                                    @@IdCliente,
                                    '@@Fecha',                                
                                    @@IdCuenta,
                                    @@IdFormaPago,
                                    '@@Concepto',
                                    '@@Referencia',
                                    @@IdMoneda,
                                    @@Importe,
                                    @@Importe,
                                    @@EsIngreso,
                                    
                                    NOW(),
                                    '@@Usuario_Alta',
                                    NOW(),
                                    '@@Usuario_Mantto'
                                )";


                Query = Query.Replace("@@RFC", this._RFC);
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                
                Query = Query.Replace("@@Estatus", SIIE_ERP.BaseDatos.EstatusDocs_Id.Estatus_Doc_Cargado.GetHashCode().ToString());

                Query = Query.Replace("@@IdCliente", Cliente);
                Query = Query.Replace("@@Fecha", FechaPago.ToString());
                Query = Query.Replace("@@IdCuenta", CuentaBancaria);

                Query = Query.Replace("@@IdFormaPago", FormaPago);
                Query = Query.Replace("@@Concepto", Concepto);
                Query = Query.Replace("@@Referencia", Referencia);
                Query = Query.Replace("@@IdMoneda", Moneda);
                Query = Query.Replace("@@Importe", Importe);

                Query = Query.Replace("@@EsIngreso", Ingreso.Equals("Ingreso") ? "1" : "0");

                return SrvDB.ExecuteQuery_Update(Query);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion


    }
}
